// // 导入路由
import router from '@/router/index.js';
// 导入store
import store from '@/store';
// 定义一个白名单
const whiteList = ['/login', '/404'];
// 引入一个进度条插件
import Nprogress from 'nprogress';
// 引入进度条样式
import 'nprogress/nprogress.css';

// 设置路由守卫
// 前置守卫
router.beforeEach(async function(to, from, next) {
  // 访问之前，开启进度条
  Nprogress.start();
  // 首先判断是否有token
  if (store.getters.token) {
    // console.log(store.getters.token);
    // 看是否为登录页
    // 注意：这里是to.path而不是router.path
    if (to.path === '/login') {
      // 如果用户要去的是登录页面就跳转到主页。因此在这里不用获取用户资料
      next('/');
    } else {
      // 如果不是，就放行
      if (!store.getters.userId) {
        const { roles } = await store.dispatch('user/sendGetUserInfo');
        // await store.dispatch('user/sendGetUserInfo');
        // console.log(roles);
        const routes = await store.dispatch('permission/filterRoutes', roles.menus);
        // console.log(routes);
        router.addRoutes([...routes, { path: '*', redirect: '/404', hidden: true }]); // 利用路由的addRoutes的方法来添加路由到路由表
        // 这里相当于多做一跳转
        next(to.path);
      } else {
        next();
      }
    }
  } else {
    // console.log(162384961);
    // 没有token, 就看是否在白名单里面;
    // const flag = whiteList.forEach(item => {
    //   if (item === to.path) {
    //     return true;
    //   }
    // });
    if (whiteList.indexOf(to.path) > -1) {
      next();
    } else {
      next('/login');
    }
  }
  Nprogress.done();
});

// 后置守卫
router.afterEach(function() {
  Nprogress.done();
});
